home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 020a / tvg102_s.zip / TVGRAPH.IN0 < prev    next >
Text File  |  1991-01-20  |  5KB  |  167 lines

  1. (*****************************************************************************)
  2. (*                                                                           *)
  3. (*  TVGRAPH Version 1.0 (C) C.L.Burke. Portions (C) Borland                  *)
  4. (*  - Thanks to Richard Wilton for much EGA/VGA and general information      *)
  5. (*  Display mode detection routines                                          *)
  6. (*                                                                           *)
  7. (*****************************************************************************)
  8. const
  9.   hcrt=$3b4;
  10. type
  11.   vsystem=(MONO,HERC,CGA,EGA,VGA,MCGA,OTHER);
  12.   TextGraphics = (_TEXT,_GRAPHICS);
  13.   (* flag if graphics / text mode *)
  14.   GraphInfo = record
  15.    XRes,YRes,CRes:word;
  16.    ScreenWriteType:TextGraphics;
  17.    ScreenSeg:word;
  18.    SuitableAdapters:set of Vsystem;
  19.   end;
  20.   (* Record keeping information on each display mode *)
  21. const
  22.   GraphScreenInfo:array[0..$13] of GraphInfo =
  23.   (
  24.   (Xres: 40;Yres: 25;CRes: 16;ScreenWriteType:    _TEXT;ScreenSeg:$B800;
  25.   SuitableAdapters:[CGA,EGA,VGA,MCGA]), (*0*)
  26.   (Xres: 40;Yres: 25;CRes: 16;ScreenWriteType:    _TEXT;ScreenSeg:$B800;
  27.   SuitableAdapters:[CGA,EGA,VGA,MCGA]), (*1*)
  28.   (Xres: 80;Yres: 25;CRes: 16;ScreenWriteType:    _TEXT;ScreenSeg:$B800;
  29.   SuitableAdapters:[CGA,EGA,VGA,MCGA]), (*2*)
  30.   (Xres: 80;Yres: 25;CRes: 16;ScreenWriteType:    _TEXT;ScreenSeg:$B800;
  31.   SuitableAdapters:[CGA,EGA,VGA,MCGA]), (*3*)
  32.   (Xres:320;Yres:200;CRes:  4;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
  33.   SuitableAdapters:[CGA,EGA,VGA,MCGA]), (*4*)
  34.   (Xres:320;Yres:200;CRes:  4;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
  35.   SuitableAdapters:[CGA,EGA,VGA,MCGA]), (*5*)
  36.   (Xres:640;Yres:200;CRes:  2;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
  37.   SuitableAdapters:[CGA,EGA,VGA,MCGA]), (*6*)
  38.   (Xres: 80;Yres: 25;CRes:  2;ScreenWriteType:    _TEXT;ScreenSeg:$B000;
  39.   SuitableAdapters:[MONO,HERC,EGA,VGA]),(*7*)
  40.   (Xres: 00;Yres: 00;CRes:  0;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
  41.   SuitableAdapters:[]),                 (*8*)
  42.   (Xres: 00;Yres: 00;CRes:  0;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
  43.   SuitableAdapters:[]),                 (*9*)
  44.   (Xres: 00;Yres: 00;CRes:  0;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
  45.   SuitableAdapters:[]),                 (*A*)
  46.   (Xres: 00;Yres: 00;CRes:  0;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
  47.   SuitableAdapters:[]),                 (*B*)
  48.   (Xres: 00;Yres: 00;CRes:  0;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
  49.   SuitableAdapters:[]),                 (*C*)
  50.   (Xres:320;Yres:200;CRes: 16;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
  51.   SuitableAdapters:[EGA,VGA]),          (*D*)
  52.   (Xres:640;Yres:200;CRes: 16;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
  53.   SuitableAdapters:[EGA,VGA]),          (*E*)
  54.   (Xres:640;Yres:350;CRes:  2;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
  55.   SuitableAdapters:[EGA,VGA]),          (*F*)
  56.   (Xres:640;Yres:350;CRes: 16;ScreenWriteType:_GRAPHICS;ScreenSeg:$A000;
  57.   SuitableAdapters:[EGA,VGA]),          (*10*)
  58.   (Xres:640;Yres:480;CRes:  2;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
  59.   SuitableAdapters:[VGA,MCGA]),         (*11*)
  60.   (Xres:640;Yres:480;CRes: 16;ScreenWriteType:_GRAPHICS;ScreenSeg:$A000;
  61.   SuitableAdapters:[VGA]),              (*12*)
  62.   (Xres:320;Yres:200;CRes:256;ScreenWriteType:_GRAPHICS;ScreenSeg:$0000;
  63.   SuitableAdapters:[VGA,MCGA]));        (*13*)
  64.  
  65.  
  66. function find6845(addr:word):boolean; (* TRUE IF 6845 *)
  67. var
  68.  tmp:byte;
  69.  dl:word;
  70. begin
  71.   port[addr]:=$F;
  72.   tmp:=port[addr+1];
  73.   port[addr+1]:=$66;
  74.   for dl:=1 to 500 do;
  75.   find6845:=port[addr+1]=$66;
  76.   port[addr+1]:=tmp;
  77. end;
  78.  
  79. function findmono:vsystem;
  80. var
  81.  cnt:word;
  82.  tmp1,tmp2:byte;
  83. begin
  84.  if find6845(hcrt) then
  85.  begin
  86.    tmp1:=port[hcrt+6] and $80;
  87.    repeat
  88.      tmp2:=port[hcrt+6] and $80;
  89.    until tmp1<>tmp2;
  90.    if tmp1<>tmp2 then findmono:=HERC
  91.                  else findmono:=MONO;
  92.  end
  93.  else (*Not Mono *)
  94.    findmono:=OTHER;
  95. end;
  96.  
  97. function findCGA:vsystem;
  98. begin
  99.  if find6845($3D4) then findCGA:=CGA
  100.                    else findCGA:=OTHER;
  101. end;
  102.  
  103. function findEGA:vsystem;
  104. var
  105.  rbx:word;
  106.  rcl:byte;
  107. begin
  108.  asm
  109.  mov bx,0010h
  110.  mov ax,1200h
  111.  int 010h
  112.  mov rbx,bx
  113.  mov rcl,cl
  114.  end;
  115.  if lo(rbx)<>$10 then
  116.  begin
  117.   case rcl div 2 of
  118.     0,3:findEGA:=CGA;
  119.     1,4:findEGA:=EGA;
  120.     2,5:findEGA:=Herc;
  121.   end
  122.  end
  123.  else (*No ega *)
  124.    findEGA:=OTHER;
  125. end;
  126.  
  127. function findPS2:vsystem;
  128. var
  129.  rax,rbx:word;
  130. begin
  131.  asm
  132.    mov ax,1A00h
  133.    int 10h
  134.    mov rax,ax
  135.    mov rbx,bx
  136.  end;
  137.  if lo(rax)=$1A then
  138.  begin
  139.    case lo(rbx) of
  140.    0,3,6,9:findPS2:=other;
  141.          1:findPS2:=MONO;
  142.          2:findPS2:=CGA;
  143.       4,10:findPS2:=EGA;
  144.          5:findPS2:=HERC;
  145.        7,8:findPS2:=VGA;
  146.      11,12:findPS2:=MCGA;
  147.    end
  148.  end
  149.  else
  150.    findPS2:=OTHER;
  151. end;
  152.  
  153. function whatvsystem:vsystem;
  154. var
  155.  ts:vsystem;
  156. begin
  157.  ts:=findPS2;
  158.  if ts=other then
  159.     ts:=findEGA;
  160.  if ts=other then
  161.     ts:=findmono;
  162.  if ts=other then
  163.     ts:=findCGA;
  164.  whatvsystem:=ts;
  165. end;
  166.  
  167.